CloudFormationでAmazon LexにLambda関数を関連付ける際、CodeHookInterfaceVersionの適切な値
困ったこと
AWS CloudFormationでAmazon LexボットにAWS Lambda関数を関連付ける場合に設定するCodeHookInterfaceVersionの値を教えて下さい。
作成したCloudFormationテンプレートは以下の通りです。
AWSTemplateFormatVersion: '2010-09-09'
Resources:
TestLexAlias:
Type: AWS::Lex::BotAlias
Properties:
BotAliasLocaleSettings:
- LocaleId: ja_JP
BotAliasLocaleSetting:
Enabled: true
CodeHookSpecification:
LambdaCodeHook:
LambdaArn: !GetAtt TestLambdaFunction.Arn
CodeHookInterfaceVersion: '1'
~中略~
上記のテンプレートでCodeHookInterfaceVersionの値を'1'
に設定してスタックを作成したところ、以下のエラーが発生しました。
Resource handler returned message: "The specified Lambda function interface version isn't valid. Specify a different interface version and try your request again.
回答
CodeHookInterfaceVersionの正しい値は'1.0'
です。
AWS ドキュメントによると、codeHookInterfaceVersionは、Amazon LexがLambda関数を呼び出す際に使用するリクエストとレスポンスの形式を定義したインターフェースのバージョンを指定するパラメータです。
codeHookInterfaceVersion
The version of the request-response that you want Amazon Lex to use to invoke your Lambda function.
Required: Yes
Type: String
Minimum: 1
Maximum: 5
AWSドキュメントには、このパラメータの最小文字数が1、最大文字数が5と記載されていますが、具体的に利用可能なバージョン値については明記されていませんでした。
ただし、AWSドキュメントの「ボットエイリアスに Lambda 関数をアタッチする」という項目に、以下のサンプルコードが記載されており、そこではCodeHookInterfaceVersionの値が'1.0'
となっていました。
{
"botAliasLocaleSettings" : {
locale: {
"codeHookSpecification": {
"lambdaCodeHook": {
"codeHookInterfaceVersion": "1.0",
"lambdaARN": "arn:aws:lambda:region:account-id:function:function-name"
}
},
"enabled": true
},
...
}
}
'1.0'
以外の値(例:'1'、'2.0'、'1.1'など)をいくつか試しましたが、いずれもエラーとなりました。
将来的にバージョンが追加される可能性はありますが、現時点では、CodeHookInterfaceVersionの値として'1.0'
を指定ください。